# -*- coding: utf-8 -*-
'''
装饰器 也是一种函数
可以结束函数作为参数
可以返回函数
接收一个函数，内部对其处理，然后返回一个新函数，动态的增强函数功能
将c函数在a函数中执行，在a函数中可以选择执行或不执行c函数，也可以对c函数的结果进行二次加工处理
装饰器 定义
def out(func_args):  // 外围函数
  def inter(*args,**kwargs): // 内嵌函数
      return func_args(*args,**kwargs)
  return inter  // 外围函数返回内嵌函数

'''

def a(func):
    def b(*args,**kwargs):
        return func(*args,**kwargs)
    return b

def c(name):
    print(name)

a(c('lin'))

@a
def c(name):
    print(name)

c('xihong')


def check_str(func):
    def inner(*args,**kwargs):
        result = func(*args,**kwargs)
        if result == 'ok':
            return  'result is %s' %result
        else:
            return 'result is failed %s' %result
    return inner

@check_str
def test(data):
    return data

result = test('no')
print(result) # result is failed no
